package org.Yiran.timetale_re.client.gui.overlay;

import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.client.gui.overlay.ForgeGui;
import net.minecraftforge.client.gui.overlay.IGuiOverlay;
import org.Yiran.timetale_re.item.ItemsRegister;
import org.Yiran.timetale_re.item.tool.screwdriver.core.ScrewdriverItem;
import org.Yiran.timetale_re.item.tool.screwdriver.modules.IModule;
import org.Yiran.timetale_re.item.tool.screwdriver.modules.container.ToolModuleContainer;
import org.Yiran.timetale_re.item.tool.screwdriver.modules.items.function.RedstoneModuleItem;
import org.Yiran.timetale_re.item.tool.screwdriver.modules.items.function.RotationModuleItem;

import java.util.Optional;

/**
 * 模块图标覆盖层
 * <p>
 * 在玩家主手持起子且有功能模块时，在界面右下角渲染当前启用功能模块的物品图标
 * </p>
 */
public class ModuleIconOverlay implements IGuiOverlay {
    
    // 动画相关变量
    private String lastActiveModuleId = null;
    private long animationStartTime = 0;
    private static final long ANIMATION_DURATION = 200; // 动画持续时间(毫秒)
    
    @Override
    public void render(ForgeGui gui, GuiGraphics guiGraphics, float partialTick, int screenWidth, int screenHeight) {
        Minecraft minecraft = Minecraft.getInstance();
        
        // 检查玩家是否在线且有主手物品
        if (minecraft.player == null || minecraft.player.getMainHandItem().isEmpty()) {
            return;
        }
        
        ItemStack mainHandItem = minecraft.player.getMainHandItem();
        
        // 检查主手物品是否为起子
        if (mainHandItem.getItem() instanceof ScrewdriverItem) {
            // 获取当前激活的功能模块
            Optional<IModule> activeModule = getActiveFunctionModule(mainHandItem);
            
            // 处理模块切换动画
            String currentModuleId = activeModule.map(IModule::getModuleId).orElse(null);
            if (currentModuleId != null && !currentModuleId.equals(lastActiveModuleId)) {
                lastActiveModuleId = currentModuleId;
                animationStartTime = System.currentTimeMillis();
            }
            
            if (activeModule.isPresent()) {
                // 获取模块对应的物品
                ItemStack moduleItemStack = getModuleItemStack(activeModule.get());
                
                if (!moduleItemStack.isEmpty()) {
                    // 在屏幕右下角绘制模块图标
                    int iconSize = 16;
                    int iconX = screenWidth - iconSize - 5; // 右边距5像素
                    int iconY = screenHeight - iconSize - 5; // 下边距5像素
                    
                    // 计算动画参数
                    float animationProgress = getAnimationProgress();
                    float scale = 1.0f + 0.5f * (1.0f - animationProgress); // 从1.5倍缩放到1.0倍

                    // 应用动画变换
                    guiGraphics.pose().pushPose();
                    if (animationProgress < 1.0f) {
                        // 设置变换中心为图标中心
                        guiGraphics.pose().translate(iconX + iconSize / 2.0f, iconY + iconSize / 2.0f, 0);
                        guiGraphics.pose().scale(scale, scale, 1.0f);
                        guiGraphics.pose().translate(-(iconX + iconSize / 2.0f), -(iconY + iconSize / 2.0f), 0);
                    }
                    
                    // 绘制物品图标
                    guiGraphics.renderItem(moduleItemStack, iconX, iconY);
                    
                    // 恢复变换
                    guiGraphics.pose().popPose();
                }
            }
        }
    }
    
    /**
     * 获取动画进度
     * 
     * @return 0.0到1.0之间的动画进度值，0.0表示动画开始，1.0表示动画结束
     */
    private float getAnimationProgress() {
        if (animationStartTime == 0) {
            return 1.0f;
        }
        
        long elapsed = System.currentTimeMillis() - animationStartTime;
        if (elapsed >= ANIMATION_DURATION) {
            return 1.0f;
        }
        
        return (float) elapsed / ANIMATION_DURATION;
    }
    
    /**
     * 获取当前激活的功能模块
     *
     * @param screwdriverStack 起子物品栈
     * @return 激活的功能模块Optional
     */
    private Optional<IModule> getActiveFunctionModule(ItemStack screwdriverStack) {
        ToolModuleContainer container = new ToolModuleContainer(Integer.MAX_VALUE);
        container.loadFromItemStack(screwdriverStack);
        return container.getActiveFunctionModule();
    }
    
    /**
     * 根据模块获取对应的物品栈
     *
     * @param module 模块
     * @return 模块对应的物品栈
     */
    private ItemStack getModuleItemStack(IModule module) {
        Item moduleItem = getModuleItem(module);
        return moduleItem != null ? new ItemStack(moduleItem) : ItemStack.EMPTY;
    }
    
    /**
     * 根据模块获取对应的物品
     *
     * @param module 模块
     * @return 模块对应的物品
     */
    private Item getModuleItem(IModule module) {
        // 根据模块类型返回对应的物品
        if (module instanceof RedstoneModuleItem) {
            return ItemsRegister.REDSTONE_MODULE.get();
        } else if (module instanceof RotationModuleItem) {
            return ItemsRegister.ROTATION_MODULE.get();
        }
        
        // 可以根据需要添加更多模块类型
        return null;
    }
}